JAWS-UG コンテナ支部 入門編

Contents

JAWS-UG コンテナ支部 入門編 #6 コンテナの始め方に参加しました。

AWS Expert Online これからはじめるコンテナワークロード - コンテナ化ベストプラクティス -

by @toricls/Amazon Web Services Japan

コンテナにまつわる4つの誤解

コンテナ化を阻む4つの誤解

  • まずはどのオーケストレーションツールを使うか考えなければならない
    • Choose "the right tools for the right job"
    • そもそも本当にコンテナが必要か?
  • コンテナを使うならマイクロサービス化しなければならない
    • ユースケースの1つではあるが、飛躍しすぎ
  • コンテナ化すると開発・運用手法が大きく変わる
    • 進め方次第。影響範囲を狭める方法はいくつもある。
  • はじめてのコンテナ利用は新規プロジェクト方がよい
    • むしろ現行プロジェクトの移行の方がよい

なぜコンテナか?

  • Run Anywhere
  • Portability
  • Isolated Process

なぜオーケストレーションツールか?

  • コンテナの機能性のスコープは単一ノードにおけるライフサイクル管理
  • オーケストレーションツール + α で実現される機能性の例
    • 複数サーバにまたがるコンテナのレプリケーションやスケジューリング
    • クラッシュしたコンテナのオートヒーリング
    • オートススケーリング
    • etc

コンテナの導入から運用まで

コンテナ導入から運用までのポイント

  • これまで使ったことがない技術の導入には成功までの道筋が必要
    • 目的・ゴールを明確にし、道筋を描く
  • ゴールに至るまでのマイルストーン
    • 一気にすべて終わらせることは難しい
    • ゴールまでのマイルストーンを適切に配置する
    • 各ステップで何をやり、何をやらないのかを明確化する
  • 改善のイテレーション
    • 改善のためのイテレーションを常に回す

初コンテナ環境におすすめのゴールと進め方

  • 既存システムを構成するアプリケーションの1つをコンテナに置き換える
    • ゴールは "置き換えの前後で同じように動く" こと
    • 一般にシステムは多くのコンポーネントから構成される
    • 本番環境に投入できる状態となるまでの間、try & errorしやすい環境でイテレーションを回すことが近道
    • 新規アプリケーションでコンテナを採用すると欲が出やすい
  • なるべく既存の開発・運用フローを変えないように進める
    • うまく行かなければコンテナを消せば大丈夫、という状態

コンテナ導入から運用までのステップ

  1. コンテナの特性とそれらが解決する課題を知る
  • その課題はコンテナじゃないと解決できないのか?
  • コンテナでの解決が最適なのか?
  1. コンテナ化
  • 何をコンテナ化するか
    • 既存システムのシンプルなWebアプリ、なければバッチジョブがオススメ
  • どうコンテナ化するか
    • Dockerfileを書く && docker build
  • 最初にやるべきこと
    • 1コンテナ1プロセス
    • アプリケーションのステートレス化
      • アプリケーションログはファイルではなく標準出力へ
      • ステートフルな例
        • セッション情報がローカルディスクに出力されている -> ElastiCacheなどを使用しましょう
  1. 手動でのデプロイ
  • ECS/FargateのGetting Startedで作成されるタスク定義の書き換えで良い
  • ECRへのdocker
  1. オーケストレータの特性と解決する課題を知る
  • オーケストレータの特性
  • EC2インスタンスタイプなど、特定条件に基づくデプロイも可能ではある
  1. 仮想マシンの家畜化
  2. チームの開発のための開発環境整備、自動化、CI/CD
  • チーム開発のための環境整備
    • "ローカル開発環境でコードを書き換えたら即反映されて動作確認可能"
    • 少なくとも今よりもユーザーエクスペリエンスが悪化しない開発環境の構築を目指す
  • ドキュメンテーション、ドキュメンテーション、ドキュメンテーション
    • 開発環境利用時のトラブルやHow To
    • スクリプトが動かないときにマニュアルでやる方法etc.
  • 自動化
    • ここまで手作業で行ってきたことをCI/CDパイプラインに組み込む
  1. 運用を見据えたデザイン
  • 現行システムで満たされているレベルを達成する
  • 検討内容の例
    • ロールバック
    • データベーススキーママイグレーション
    • オートスケーリング
    • ネットワークポリシー
    • ログ分析
    • IAMロール設計
    • 負荷試験による適切なタスクリソースの割当
    • 秘密情報・設定情報の取扱etc.
  • ここまで構築してきた仕組みに乗って、イテレーションを回す
  • ドキュメンテーション、ドキュメンテーション、ドキュメンテーション
  1. 社内・チーム教育
  • 自分だけが仕組みを理解している状態は脆弱
  • ここまでの仕組みをなぜ採用したのか意思決定の意図も共有
  • ドキュメンテーション、ドキュメンテーション、ドキュメンテーション
  1. システムとチームの成長を見据えたモダナイゼーションと最適化
  • さらなる自動化の推進
  • デリバリ高速化、影響範囲最小化を目指したマイクロサービス化
  • 直接コスト削減のための環境最適化

1~3 1st Milestone
4~5 2nd Milestone
6〜7 3rd Milestone
8 4th Milestone
9本番環境導入後

まとめ

  • ゴールと道筋を明確にする
  • はじめてのコンテナワークロードには既存アプリケーションがオススメ
  • コンテナ化から本番環境投入まで、すべてにおいてイテレーションを回す
  • コンテナ化にあたっての作業量、チームメンバーのオンボーディングの考慮
  • 本番環境投入後も継続的に改善する

AWS クラウドサービス活用資料集に後日アップ予定だそうです。

平成最後なのでEC2インフラからECS+Fargateに置き換えた話

by Masashi Yamamotoさん/SRE at eureka

平成最後なのでEC2からECS+Fargateに置き換えた話

AWS での Docker ビルド & 脆弱性スキャンミニハンズオン

byコンテナ支部

最近の勉強会だとよく導入されていますが、

  • 環境は、Dokcerで準備しておいたimageをpullしてもらう。
  • テキストは、Jupyterでnotebookを準備しておいて進めてもらう。

という手法は、研修等にも活用していきたいと思いました。


以上

← Posts